{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 重新读入数据，使用GBDT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import scipy as sc\n",
    "import scipy.sparse as sp\n",
    "from sklearn.utils import check_random_state \n",
    "import pylab \n",
    "import sys\n",
    "import time\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "fea0_1=pd.read_csv('~/10w_train_count_day_hash.csv')\n",
    "fea1_1=pd.read_csv('~/test_count_day_hash.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 准备数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "catNum=['site_id','site_domain','site_category','app_id','app_domain',\n",
    "        'app_category','device_id','device_ip','device_model','C17','C19',\n",
    "        'C20','C21','hour_day','device_id_count','device_ip_count','user_count']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train=fea0_1\n",
    "y_train=fea0_1['click']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 训练样本50w+，先使用交叉验证，再用train_test_split估计模型性能\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 0.8,random_state = 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. 直接调用xgboost内嵌的cv寻找最佳的参数n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "from sklearn.metrics import log_loss\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "#kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=5, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    #xgb_param['num_class'] = 2\n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='logloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='logloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "    #Predict training set\n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of train :\n",
      "0.38999714410736386\n"
     ]
    }
   ],
   "source": [
    "#先寻找最佳的树个数，n_estimators=157\n",
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.05,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators  \n",
    "        max_depth=5,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample = 0.85,\n",
    "        colsample_bytree=0.7,\n",
    "        colsample_bylevel=0.9,\n",
    "        reg_alpha = 2.5,\n",
    "        reg_lambda= 0.5,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=3)\n",
    "# 训练数据：X_train_part, y_train_part   验证数据：X_val, y_val\n",
    "modelfit(xgb1, X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮：logloss of train :\n",
    "0.38627035965123563\n",
    "第二轮：logloss of train :\n",
    "0.3859769922715946\n",
    "第三轮：logloss of train :\n",
    "0.38219099945632534\n",
    "\n",
    "\n",
    "{'base_score': 0.5,\n",
    " 'booster': 'gbtree',\n",
    " 'colsample_bylevel': 0.7,\n",
    " 'colsample_bytree': 0.9,\n",
    " 'gamma': 0,\n",
    " 'learning_rate': 0.05,\n",
    " 'max_delta_step': 0,\n",
    " 'max_depth': 5,\n",
    " 'min_child_weight': 5,\n",
    " 'missing': None,\n",
    " 'n_estimators': 1431,\n",
    " 'nthread': 1,\n",
    " 'objective': 'binary:logistic',\n",
    " 'reg_alpha': 2.5,\n",
    " 'reg_lambda': 0.5,\n",
    " 'scale_pos_weight': 1,\n",
    " 'seed': 3,\n",
    " 'silent': 1,\n",
    " 'subsample': 0.85}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'base_score': 0.5,\n",
       " 'booster': 'gbtree',\n",
       " 'colsample_bylevel': 0.9,\n",
       " 'colsample_bytree': 0.7,\n",
       " 'gamma': 0,\n",
       " 'learning_rate': 0.05,\n",
       " 'max_delta_step': 0,\n",
       " 'max_depth': 5,\n",
       " 'min_child_weight': 5,\n",
       " 'missing': None,\n",
       " 'n_estimators': 502,\n",
       " 'nthread': 1,\n",
       " 'objective': 'binary:logistic',\n",
       " 'reg_alpha': 2.5,\n",
       " 'reg_lambda': 0.5,\n",
       " 'scale_pos_weight': 1,\n",
       " 'seed': 3,\n",
       " 'silent': 1,\n",
       " 'subsample': 0.85}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb1.get_xgb_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe2e71d0da0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as pyplot\n",
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-logloss-mean']\n",
    "test_stds = cvresult['test-logloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-logloss-mean']\n",
    "train_stds = cvresult['train-logloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fe2e71d0f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[20:]\n",
    "# plot\n",
    "test_means = cvresult['test-logloss-mean']\n",
    "test_stds = cvresult['test-logloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-logloss-mean']\n",
    "train_stds = cvresult['train-logloss-std'] \n",
    "\n",
    "x_axis = range(30,cvresult.shape[0]+30)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [],
   "source": [
    "#验证数据：X_val, y_val\n",
    "#train_predprob = xgb1.predict_proba(X_val)\n",
    "#logloss = log_loss(y_val, train_predprob)\n",
    "#Print model report:\n",
    "#print ('logloss of validation is:', logloss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮：logloss of validation is: 0.41698918235700383\n",
    "第二轮：logloss of validation is: 0.4204885146566607"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.5278253894150391"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.metrics import roc_auc_score\n",
    "y_prob = xgb1.predict_proba(X_train)[:,1] # This will give you positive class prediction probabilities  \n",
    "y_pred = np.where(y_prob > 0.5, 1, 0) # This will threshold the probabilities to give class predictions.\n",
    "xgb1.score(X_train, y_pred)\n",
    "auc_roc=roc_auc_score(y_train,y_pred)   #算得分\n",
    "auc_roc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f9b2f48e2b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from xgboost import plot_importance\n",
    "plot_importance(xgb1)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.00618455, 0.0104725 , 0.07635854, 0.0682774 , 0.02292405,\n",
       "       0.05401171, 0.03051043, 0.01723427, 0.03356148, 0.11338336,\n",
       "       0.09763338, 0.00577224, 0.00915313, 0.07965697, 0.0058547 ,\n",
       "       0.00634947, 0.06959677, 0.02383112, 0.05054836, 0.04090047,\n",
       "       0.04395151, 0.01170941, 0.02416096, 0.03108766, 0.0655562 ,\n",
       "       0.00131937], dtype=float32)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb1.feature_importances_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_X_train = X_train.ix[:,xgb1.feature_importances_>0]\n",
    "#new_X_val = X_val.ix[:,xgb1.feature_importances_>0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#new_X_train.head()\n",
    "xgb_train=xgb1.apply(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[27, 38, 34, ..., 30, 29, 49],\n",
       "       [33, 40, 34, ..., 31, 29, 49],\n",
       "       [34, 38, 34, ..., 34, 26, 37],\n",
       "       ...,\n",
       "       [33, 40, 34, ..., 31, 29, 40],\n",
       "       [33, 39, 34, ..., 24, 31, 37],\n",
       "       [27, 43, 34, ..., 31, 25, 40]], dtype=int32)"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#调用one-hot编码\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "oneHot = OneHotEncoder()\n",
    "#调用LR分类模型\n",
    "#使用X_train训练GBDT模型，后面用此模型构造特征\n",
    "#fit one-hot编码器\n",
    "lr_train=oneHot.fit_transform(xgb_train)\n",
    "#使用训练好的GBDT模型构建特征，然后将特征经过one-hot编码作为新的特征输入到LR模型训练。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "#需要调优的参数\n",
    "# 请尝试将L1正则和L2正则分开，并配合合适的优化求解算法（slover）\n",
    "#tuned_parameters = {'penalty':['l1','l2'],\n",
    "#                   'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "#                   }\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='neg_log_loss')\n",
    "grid.fit(lr_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.40643473170565136\n",
      "{'C': 0.001, 'penalty': 'l2'}\n"
     ]
    }
   ],
   "source": [
    "# examine the best model\n",
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存模型\n",
    "import pickle\n",
    "pickle.dump(xgb1, open(\"xgb_model.pkl\", 'wb'))\n",
    "#测试模型\n",
    "import pickle\n",
    "xgb = pickle.load(open(\"xgb_model.pkl\", 'rb'))\n",
    "train_predprob = xgb.predict_proba(X_train)\n",
    "logloss = log_loss(y_train, train_predprob)\n",
    "#Print model report:\n",
    "print ('logloss of train is:', logloss)\n",
    "#logloss of train is: 0.38721551918830166\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第二步：调整树的参数：max_depth & min_child_weight\n",
    "\n",
    "(粗调，参数的步长为2；下一步是在粗调最佳参数周围，将步长降为1，进行精细调整)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py:137: DeprecationWarning: Scoring method log_loss was renamed to neg_log_loss in version 0.18 and will be removed in 0.20.\n",
      "  sample_weight=sample_weight)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.41655, std: 0.00074, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.41661, std: 0.00072, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.41673, std: 0.00096, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.41281, std: 0.00094, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.41300, std: 0.00106, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.41272, std: 0.00106, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.41447, std: 0.00069, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.41355, std: 0.00150, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.41354, std: 0.00130, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.41908, std: 0.00137, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.41743, std: 0.00125, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.41631, std: 0.00185, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 5},\n",
       " -0.41271621624977284)"
      ]
     },
     "execution_count": 165,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=157,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([15.37328806, 15.33458295, 15.34409237, 24.39013324, 24.29803681,\n",
       "        24.31313148, 33.92179732, 33.48471403, 34.02185998, 43.62611227,\n",
       "        42.19443769, 30.05446916]),\n",
       " 'mean_score_time': array([0.18566036, 0.16080389, 0.15374179, 0.25138102, 0.25084548,\n",
       "        0.24891911, 0.34640536, 0.33312044, 0.33323913, 0.5237967 ,\n",
       "        0.45661879, 0.30088196]),\n",
       " 'mean_test_score': array([-0.41655273, -0.41661096, -0.41672532, -0.41281379, -0.41299686,\n",
       "        -0.41271622, -0.41446548, -0.41355304, -0.41354167, -0.41908043,\n",
       "        -0.41743346, -0.41631144]),\n",
       " 'mean_train_score': array([-0.41133546, -0.41173183, -0.4118581 , -0.39589014, -0.39778123,\n",
       "        -0.39860189, -0.37209336, -0.37821524, -0.38211033, -0.3401377 ,\n",
       "        -0.35512619, -0.36297378]),\n",
       " 'param_max_depth': masked_array(data=[3, 3, 3, 5, 5, 5, 7, 7, 7, 9, 9, 9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([ 8,  9, 10,  2,  3,  1,  6,  5,  4, 12, 11,  7], dtype=int32),\n",
       " 'split0_test_score': array([-0.41737211, -0.41758883, -0.41753595, -0.41273981, -0.41355819,\n",
       "        -0.41296981, -0.41428085, -0.4140067 , -0.41431683, -0.41849563,\n",
       "        -0.41664683, -0.41635714]),\n",
       " 'split0_train_score': array([-0.41086991, -0.41160782, -0.4116147 , -0.39527843, -0.39769186,\n",
       "        -0.39817616, -0.37076995, -0.37834256, -0.38176389, -0.34023478,\n",
       "        -0.35528471, -0.36330104]),\n",
       " 'split1_test_score': array([-0.41741874, -0.41717157, -0.41729192, -0.4140845 , -0.41438409,\n",
       "        -0.41408148, -0.41521356, -0.41427205, -0.41423192, -0.42181243,\n",
       "        -0.41872879, -0.4183295 ]),\n",
       " 'split1_train_score': array([-0.41094859, -0.41119737, -0.41126302, -0.39607498, -0.39818114,\n",
       "        -0.39865844, -0.37187934, -0.3775528 , -0.38120408, -0.33766485,\n",
       "        -0.35427435, -0.36223092]),\n",
       " 'split2_test_score': array([-0.41561174, -0.41579068, -0.41523312, -0.41239083, -0.41182458,\n",
       "        -0.41113018, -0.41331448, -0.41077138, -0.41101499, -0.4183719 ,\n",
       "        -0.41567646, -0.41344796]),\n",
       " 'split2_train_score': array([-0.41175324, -0.4123946 , -0.41210348, -0.39648107, -0.39838403,\n",
       "        -0.39892312, -0.37386903, -0.37915045, -0.3822875 , -0.34153652,\n",
       "        -0.35644072, -0.36397483]),\n",
       " 'split3_test_score': array([-0.41587602, -0.41581287, -0.41595662, -0.41135626, -0.41168106,\n",
       "        -0.41193938, -0.41438825, -0.41347598, -0.41362844, -0.41814923,\n",
       "        -0.41715289, -0.41520602]),\n",
       " 'split3_train_score': array([-0.41178254, -0.41188817, -0.41237045, -0.39587239, -0.39746475,\n",
       "        -0.39851971, -0.37201682, -0.3775552 , -0.38190866, -0.34117107,\n",
       "        -0.35534276, -0.36284938]),\n",
       " 'split4_test_score': array([-0.41648494, -0.41669077, -0.41760891, -0.41349756, -0.41353635,\n",
       "        -0.41346019, -0.41513026, -0.41523902, -0.41451608, -0.41857303,\n",
       "        -0.41896241, -0.41821659]),\n",
       " 'split4_train_score': array([-0.41132302, -0.41157121, -0.41193883, -0.39574384, -0.39718435,\n",
       "        -0.398732  , -0.37193165, -0.3784752 , -0.3833875 , -0.3400813 ,\n",
       "        -0.3542884 , -0.36251274]),\n",
       " 'std_fit_time': array([0.07248045, 0.0843758 , 0.13533643, 0.2483107 , 0.35454889,\n",
       "        0.15967692, 0.10703793, 0.53976992, 0.33333137, 0.41152011,\n",
       "        1.15888524, 2.68233341]),\n",
       " 'std_score_time': array([0.01476914, 0.01466619, 0.00581806, 0.00424167, 0.00739597,\n",
       "        0.00951971, 0.00671521, 0.00264559, 0.0040204 , 0.00789179,\n",
       "        0.06180336, 0.0190376 ]),\n",
       " 'std_test_score': array([0.00074423, 0.00071927, 0.00095671, 0.00093712, 0.0010617 ,\n",
       "        0.00105836, 0.00068795, 0.00150391, 0.00129756, 0.00137348,\n",
       "        0.001249  , 0.00185069]),\n",
       " 'std_train_score': array([0.00038496, 0.00039763, 0.00038538, 0.00039478, 0.00044446,\n",
       "        0.00024953, 0.00099822, 0.00060546, 0.00072726, 0.00135293,\n",
       "        0.00080344, 0.00061467])}"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.412716 using {'max_depth': 5, 'min_child_weight': 5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f26fb898438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第二步：调整树的参数：max_depth & min_child_weight\n",
    "\n",
    "(粗调，参数的步长为2；下一步是在粗调最佳参数周围，将步长降为1，进行精细调整)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [4, 5, 6], 'min_child_weight': [4, 5, 6]}"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = [4,5,6]\n",
    "min_child_weight = [4,5,6]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.41445, std: 0.00090, params: {'max_depth': 4, 'min_child_weight': 4},\n",
       "  mean: -0.41456, std: 0.00084, params: {'max_depth': 4, 'min_child_weight': 5},\n",
       "  mean: -0.41445, std: 0.00077, params: {'max_depth': 4, 'min_child_weight': 6},\n",
       "  mean: -0.41304, std: 0.00109, params: {'max_depth': 5, 'min_child_weight': 4},\n",
       "  mean: -0.41272, std: 0.00106, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.41321, std: 0.00096, params: {'max_depth': 5, 'min_child_weight': 6},\n",
       "  mean: -0.41273, std: 0.00057, params: {'max_depth': 6, 'min_child_weight': 4},\n",
       "  mean: -0.41292, std: 0.00066, params: {'max_depth': 6, 'min_child_weight': 5},\n",
       "  mean: -0.41276, std: 0.00096, params: {'max_depth': 6, 'min_child_weight': 6}],\n",
       " {'max_depth': 5, 'min_child_weight': 5},\n",
       " -0.41271621624977284)"
      ]
     },
     "execution_count": 176,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=157,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([19.87262383, 20.36924291, 19.60885825, 23.91988721, 23.78038845,\n",
       "        23.90305142, 28.72446222, 29.45523968, 21.96872802]),\n",
       " 'mean_score_time': array([0.21951156, 0.21292176, 0.19179435, 0.23661871, 0.24435334,\n",
       "        0.24145265, 0.31237526, 0.3039144 , 0.20895028]),\n",
       " 'mean_test_score': array([-0.41444511, -0.41455527, -0.41444604, -0.41304358, -0.41271622,\n",
       "        -0.41320813, -0.4127345 , -0.41291772, -0.41275539]),\n",
       " 'mean_train_score': array([-0.40539094, -0.4055926 , -0.40572768, -0.39819506, -0.39860189,\n",
       "        -0.39903224, -0.38946582, -0.39067843, -0.39154701]),\n",
       " 'param_max_depth': masked_array(data=[4, 4, 4, 5, 5, 5, 6, 6, 6],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[4, 5, 6, 4, 5, 6, 4, 5, 6],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 4, 'min_child_weight': 4},\n",
       "  {'max_depth': 4, 'min_child_weight': 5},\n",
       "  {'max_depth': 4, 'min_child_weight': 6},\n",
       "  {'max_depth': 5, 'min_child_weight': 4},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 6},\n",
       "  {'max_depth': 6, 'min_child_weight': 4},\n",
       "  {'max_depth': 6, 'min_child_weight': 5},\n",
       "  {'max_depth': 6, 'min_child_weight': 6}],\n",
       " 'rank_test_score': array([7, 9, 8, 5, 1, 6, 2, 4, 3], dtype=int32),\n",
       " 'split0_test_score': array([-0.41454866, -0.41455635, -0.41426842, -0.4134432 , -0.41296981,\n",
       "        -0.41351616, -0.41245954, -0.41303706, -0.41281275]),\n",
       " 'split0_train_score': array([-0.40541247, -0.40589278, -0.40540299, -0.39774779, -0.39817616,\n",
       "        -0.39855731, -0.3901777 , -0.39130314, -0.39153717]),\n",
       " 'split1_test_score': array([-0.41492536, -0.41490727, -0.41524138, -0.41423563, -0.41408148,\n",
       "        -0.4143265 , -0.41350698, -0.41363081, -0.413544  ]),\n",
       " 'split1_train_score': array([-0.4049829 , -0.40516488, -0.40546953, -0.39832733, -0.39865844,\n",
       "        -0.39922537, -0.38926613, -0.39031789, -0.39146579]),\n",
       " 'split2_test_score': array([-0.41398535, -0.41412674, -0.41411419, -0.41129837, -0.41113018,\n",
       "        -0.41208397, -0.41200008, -0.41191189, -0.41151247]),\n",
       " 'split2_train_score': array([-0.40595484, -0.40597542, -0.406271  , -0.39854189, -0.39892312,\n",
       "        -0.39966766, -0.38948837, -0.3910854 , -0.39209004]),\n",
       " 'split3_test_score': array([-0.41303644, -0.41332666, -0.41326495, -0.41230555, -0.41193938,\n",
       "        -0.41206538, -0.41243068, -0.41244817, -0.4118693 ]),\n",
       " 'split3_train_score': array([-0.40541342, -0.4055394 , -0.40594226, -0.39813244, -0.39851971,\n",
       "        -0.39893696, -0.39026553, -0.39092406, -0.39143384]),\n",
       " 'split4_test_score': array([-0.41572971, -0.41585934, -0.4153413 , -0.41393512, -0.41346019,\n",
       "        -0.41404863, -0.41327522, -0.41356063, -0.41403842]),\n",
       " 'split4_train_score': array([-0.40519105, -0.40539054, -0.4055526 , -0.39822584, -0.398732  ,\n",
       "        -0.39877393, -0.38813135, -0.38976167, -0.3912082 ]),\n",
       " 'std_fit_time': array([0.60954691, 0.55214232, 0.31174082, 0.19774255, 0.06504545,\n",
       "        0.18241212, 0.75987391, 0.32767216, 0.69257508]),\n",
       " 'std_score_time': array([0.05195838, 0.03526746, 0.00297429, 0.00432163, 0.00201508,\n",
       "        0.00264619, 0.03330841, 0.08420227, 0.04705974]),\n",
       " 'std_test_score': array([0.00090412, 0.00083875, 0.0007708 , 0.00109232, 0.00105836,\n",
       "        0.00096142, 0.00056504, 0.00065851, 0.0009593 ]),\n",
       " 'std_train_score': array([0.00032416, 0.00030439, 0.00032983, 0.0002618 , 0.00024953,\n",
       "        0.00038534, 0.00077039, 0.00056332, 0.00029298])}"
      ]
     },
     "execution_count": 177,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_2.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.412716 using {'max_depth': 5, 'min_child_weight': 5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAacAAAELCAYAAAB9MUkNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xl8VOXZ+P/PlZ0kLAmEkBAoqKggKEuKYAuuWKzWpaWLSyt96s9atNr604qPtmrVp5THWrWLrfWpa621WKtSVBDFrQUNisoqiwghCxDWJJD1+v5xn0lmJjPJZJnMJFzv12tec+ac+5y5z2SSK/cuqooxxhgTTxJinQFjjDEmmAUnY4wxcceCkzHGmLhjwckYY0zcseBkjDEm7lhwMsYYE3csOBljjIk7FpyMMcbEHQtOxhhj4k5SrDPQUw0aNEhHjBgR62wYY0yPsnLlyt2qmtNWOgtOHTRixAiKiopinQ1jjOlRROSzSNJZtZ4xxpi4Y8HJGGNM3LHgZIwxJu5YcDLGGBN3LDgZY4yJOxacjDHGxB0LTsYYY+KOjXMypreoOQjF78Hh/XD0mZDWL9Y5MqbDYhKcRCQb+BswAtgKfENV94ZJ2w9YBzynqtd4++4GvgNkqWqmX9rrgSuAemAX8F+q+pmInA782u+yxwPfUtV/isijwKnAfu/YbFVd1UW3akz07C+GbcvdY/tyKF8D2uiOJaXBqLNh3CwY9SVITottXo1pJ1HV7n9TkfnAHlWdJyJzcUHmpjBp7wdyvPS+4DQF+AzYGBScTgdWqGq1iPwAOE1Vvxl0vWxgE1DgpXsUWKiqC9pzD4WFhdqRGSKWfLaEfTX7GJo5lILMAvIy8khOTG73dcwRprEBylfDthUuEG1bAQeK3bHkDCiYBMOmwPApkNwH1jznHlW7IKUvjD4Pxs6Co04F+76ZGBKRlapa2Fa6WFXrXQCc5m0/BiwDWgQnEZkE5AIvA003o6rLveMB6VX1db+Xy4HLQrz3LOAlVa3uaOY745kNz7C8dHnT6wRJYHD64KZgNbSv95w5lKGZQ8lJzyFBrGnwiFNT6arotq9wJaPiIqg96I71zXNBaNgPYfjJkDsOEoN+lT93CnzpF7D1Tfj4WVj3Inz4V0gfCGMudCWqYVMgwb5bJj7FquS0T1UH+L3eq6pZQWkSgNeAbwNnAoW+kpNfmkr/klPQsd8CZap6V9D+14B7VXWh9/pRYCpQAywF5qpqTVv30NGSU0NjAzurd1JcWcyOyh3ucXCHe31wBzsP7QxIn5KQQn5mvgtefZuDli+I9Uvp1yJImx5o/47mEtH25VD2sVdFJ5B7Agw72QtIJ8OA4dDen3l9DWxcAqsXwIaXof4Q9CuAsRe5ElXeSe2/pjmiNDQ2sPvQbsqqyxiTPabDNT6RlpyiFpxE5FVgSIhDtwCPRRCcrgHSVXW+iMymHcFJRC4DrgFO9Q80IpIHfATkq2qd374yIAV4CNisqj8Pc09XAlcCDB8+fNJnn0U0f2G71DTUUFJZ0hS0dlS6wFV80AWzA7UHAtJnJme2CFy+7fzMfPok9enyPJpOamyAnWu9tiKvZLR/uzuWnA5DJ3mBaAoUFEKfAa1fr71qKmHDIvh4AWxeCo31MPAYF6TGzYJBo7r2/UzcU1X21+ynrLqMsqoySqtKKasqC3jsrN5JvdYD8PyFz3NU/6M69F4xD06tvqnIBlx7UKkXHJap6nFBaf4CTAMagUxc8Pi9qs71S9MiOInIWcBvcIFpZ9Cx64ATVPXKMPk6DbhBVc9r6x46WnLqrIO1BwNLW17pq/hgMSWVJRxuOByQfmDawICqQv8gNiRjCEkJ1mEz6mqrXLXc9hWw7T9uu8b7JyNziKuaGzbFPQ85sXvbhKr3wNrnYfWzsPVtQF0exs2CE74KA4Z1X15M1FTXVTcFHv+HLwiVV5dzqP5QwDlJCUkMSR/CkAz3yMvIa9qelDuJjOSMDuUl3oPT/wIVfh0islX1J62kn00EJScRmQAsAGaq6sYQ11kO3OzfNiUieV6QFFyPvsP+ATCcWAWn1qgqFYcrmkpZ/oFrR+UOyqrKaNCGpvSJksiQjCFNbV1NVYZeEBuYNtCqDDviQKlXRec9yj4GbQAEBo/2quimumA04HPxU512oMR1olj9LOxY6fYNnwpjv+baqTLbXILHxEBdYx07q3e2CDhNj+oy9tfsDzhHEHL65DAkYwi5GbkBgce3nZ2WHZX27ngPTgOBZ4DhwDbg66q6R0QKgatU9Yqg9LPxC05eb79LgHygBHhYVW/3qhLHAaXeqdtU9XzvnBHAO8AwVV9/26Y2qBxAgFXe+1e2dQ/xGJzaUt9YT1lVWYug5WvvqjhcEZA+LTGtqX2rKWj5BbK+KX1jdCdxpLEBdq4LbC/at80dS+rTXEU3fAoUfL7rq+iiZc8WF6Q+fhZ2rQNJdD39xs5yPf/S+sc6h0eERm1kz+E94QNPVRm7Du1CCfw73i+lX0DACQ48g/sMjlkv4bgOTr1BTwxObTlUf6ipvcu/9OXbrqwLjNn9Uvo1VRM29TD0Ald+Zj6piakxupMoqq1ypQpfINr+Hvj+K80Y3ByIhk2BvG6uoouW8jWufWr1Ahd4E1Nh1AxX9XfsTNd13XTIwdqDIQOOf3VbXWNdwDlpiWkhA86Q9CEMyXTP6cnpMbqjtllwirLeGJxao6ocqD3QVMpqClx+r4N/iQanD24RtHyBbHD6YBITEmN0N+1wsCyw40LZR64DAUDO6MD2oqyR8VNFFw2qrr1s9QJY/Q+o2gkpmXD8ua5EdfTpvSMYd5GahpqQAaesuoyySvdcVVcVcE6iJDI4fTB5GXmB1W3pQ8jLzGNI+hD6p/bv0dXtFpyi7EgLTm1p1EZ2Ve9qEbR8nTbKq8oDqh6SEpLIz8gPCFz+gSwrNav7fwEbG2HX+uYqum3/gX1ej8ykNFdF5+vSXfB5SM/u3vzFk8YG2PqWK1Gte8FNmdQnG8Zc4EpUw0/p1WOoGhob2HVoV8jqttKqUsqry9lzeE+L87LTslu07+Rm5Lrgk5HHoD6DesY/bZ1gwSnKLDi1T11DHaVVpc09DA8GdtjYWxM4e1V6UnrLoOU3vqtLqi1qq6Hk/eaOC8Xvuj+yABk5fmOLprhxQEkpnX/P3qi+BjYt9cZQvQR11dA3H8Z+1XWmyJ/Qo0qUqsq+mn0hq9vKql3w2VW9K6BzEbhhHQFtPH6lnbyMPAZnDO6dVd3tZMEpyiw4da3quuqQVYa+9q7gbq7ZadkBvQv9A1nYKaEOlgd2XCj9sLmKbtBxflV0UyD7qB71BzVu1Fa5ALX6WTfot7HOfZa+MVQ5x7V9jSirrqsOKO0EVLdVlVFeVd5iSEZKQkpANVtuem5T4PEFI+sgFBkLTlFmwan7qCp7a/YGDEr2H+tVWlnaNDgQ3JRQuem5DE3NYmijMPTQAQr2FDN0fxlD6+vJIYmEoRObS0XDJh/ZVXTRcmivmzbp47/Dp28B6qZaGvc1V6IaMLzL37KuoY7y6vKADgWllaUBg0sP+qaB8iRIAoP6DGruXJDeclxPdlp2j27niScWnKLMglP8aGhsYOeBbRRvXcaOkhXs2L2BHVUl7EhopDgpiZ1JgQONm6aE6hu6yrB/qnWT7nIHy2DNP13VX/F7bl/BZG+w70WQObjNSzRqIxWHKlqUesqry5u2Kw5VtOhWPSB1QEBVW3DgyUnPITnBOnJ0FwtOUWbBKcYqdzUPdN2+AkpWuSokgEHHBrQX1QwooKSqtMWUUL72ruApofom9w05KNmmhOoie7c2j6HauQYkAR0xjQNjvkJZwQTK6qsC2nd87T3l1eXUN9YHXKpPUp8W7TvBY3vs5xVfLDhFmQWnbqQKuz/x69L9HzdIFCAxBfInNrcXDTsZMga26/LhpoTyBbLg9odBfQaFDFw2JVR4h+sPh2zfKdu7mbJ9n1Jad4BDQbVmSZJIboj2Hf9Sj0183PNYcIoyC05RVHcYSj4ILBkd8nrz9clunp17+BTIGx/VhfTCTQnlC2Q2JZSbeWRX9S5X0glq3ymvclVuwb0xwQX5gJJOfT1Ddn5C3tYVDDm4k4EJaSQe/2VvDNUZ1luyl7DgFGUWnLpQ1e7m1Vy3rYDSVdBQ644NPKZ5kOvwqe51HP1xDzcllO+x+9DugPR9kvq48V09ZEooVXXT5/gNHA0e17Pr0C4am2cEA1zVqG+2glDT6OSm55KSGCbYNDbAZ++4MVRrn4fD+6BPFow+37VRfe4L0MvHAvVmFpyizIJTB6nC7o2BXborNrljiSmuJNQ0BdDJkDEotvntpHBTQvleB08J1T+1f2DQ8uuokZ+ZH/4PegdV1laGbN/xb+epaQhc3iwlIaWpmi3cpKEdnbG6hfpa2Pya60ixfhHUVbmZ3Md+1ZWohk6Mq39WTNssOEWZBacI1de4Kjpf9dz2FVDtTTDbJ6u5VDRsihusGcUqunjT1pRQJZUl1DbWNqUXhJz0nBZTQhVkFlDQt4CcPjkBswvUNtS6arXqljMY+MbzHKxr2a16cPrggPad3IzcgMATk9k7wA2a/uRlbwzVYle6zhrhuqWPnQW5Y7o/T6bdLDhFmQWnMKoqvCDklYxK3m+uoss+OrC9aOCoXj3FTWeFmxLK97qsqizklFCZKZmUV5W3mGUeICs1K/SkoRnN0+f0iA4dh/bB+oWu6u/TN9yqwYPHeIHqa5A9MtY5NGFYcIoyC064KrqKzYFrF1V4y2glJEP++MDlxSMYy2IiF25KqIN1B1t0qc7LyCM3PZe0pF5YMq3c2TyGavsKt29oYfMYqr6hFuQ2sWLBKcqOyOBUX+Om/Nn2H6+9aAVUew3+aQO8QORV0Q2daEspmO639zNY8w83hqr8Y5AEGPFFV+035nxXlWxiyoJTlB0Rwal6T/NSEdtXwI73wdc4njXSr4puqhv4alV0Jp7s2tC8DtWeLa40f8xZrkR13DmQ0kWdNky7WHCKsl4XnFTdL7B/l+7dG9yxhCQ3K/cwv150fXNjm19jIqXqOuWsftatQ3WwBJLTXYAaOwuOOROSbLbw7mLBKcp6fHCqr3VVdP4DXat2uWNp/V0A8rUX5U+ElPhdWdOYiDU2umrp1QtcO9WhPe77PvorLlCNnG5jqKIs7oOTiGQDfwNGAFuBb6hqy2HkLm0/YB3wnKpe4+27G/gOkKWqmX5prwKuBhqASuBKVV3rHbsZ+J537FpVfcXbPxO4H0gEHlbVeW3lv8cFp0N7Yfu7flV0K6Hem5Yna0Rgl+6c462KzvR+DXWwZZmr+lu/EGorIWOw60QxbpZbUNLGUHW5nhCc5gN7VHWeiMzFBZmbwqS9H8jx0vuC0xTgM2BjUHDqp6oHvO3zgTmqOlNExgB/BSYD+cCrwLHeaZ8AM4Bi4D3gYl9ACyeug5Mq7P20eZDrtuVuhVdwVXRDTgzs0m29mcyRru4QfPKKK1F9sti1rQ4Y7jeG6gQLVF0k0uAUywENFwCneduPAcuAFsFJRCYBucDLQNMNqepy73hAel9g8mRA00CQC4CnVbUG+FRENuECFcAmVd3iXe9pL22rwSmuNNRB6UeuusLXXlS10x1L7Q/DPu9+wYaf7JYat4ZgYwIl94ETLnSPw/th/b9cieqdB+DtX7vahLGz3FpU2UfFOrdHhFgGp1xVLQVQ1VIRaTEIRkQSgF8B3wbOjPTCInI1cD2QApzh7R4KLPdLVuztA9getP/kSN8rJg7tc1V0vkC0YyX4VoodMByOOq15Lrqc460O3Zj2SOsP4y9xj8pdsPafrjPF63e5R/5EbwzVV6FfXqxz22tFNTiJyKtAqDqjWyK8xBxgkapub890Kar6O+B3InIJcCtwORDqAgqEalwJWdcpIlcCVwIMH971q3iGpOrWv/Hv0r1zncuiJMKQcTDp8uZVXe2XxZiuk5kDk/8/99i33RtDtQBe+W945RZvDNXXYMwFtppyF4tlm9MG4DSv1JQHLFPV44LS/AWYBjQCmbiS0O9Vda5fmkr/Nqeg8xOAvara3+sMgar+wjv2CnC7l/R2Vf2Stz8gXThRa3NqqIOyj/zai1ZAZZk7ltLXVdENn+rai4ZOgtSQt26MiabdG5vHUFVscm25R5/hqv6O/zKkxtfs8vGkJ7Q5vYAr0czznp8PTqCql/q2RWQ2UOgfmEIRkVGq6s2hw7mAb/sF4CkRuRfXIWIU8C6uRDVKREYCO4BvAZd0/Lba6fB+2P5ec8eFHSuhrtod6z8cRk5r7rgweIxV0RkTDwaNgtNvhtPmuiEZqxe4MVQbF0NSHzj2S67q75gZR9Rkxl0plsFpHvCMiHwP2AZ8HUBECoGrVPWK1k72evtdAqSLSDGuC/jtwDUichZQB+zFBT5UdY2IPIPr6FAPXK3qVokTkWuAV3Bdyf+sqmu6+mab7NvWPA/dtuWwcy2uii7BVdFN+HZzl+7+Q9u8nDEmhkTcHJL54+Gsn7tqd98YqrX/dB2SRp/nqv5GngqJPWBS3Thhg3A7qMPVeo+d72ZRTsl04yh8XboLCq0qwJjeoqEePl3m5vhbvxBqDkBGDoy50BtDNfmIHUsY9+OceroOB6filZCY7MZNWBWdMb1f3WFX3bd6gRtLVX8Y+g9rXjBxyLgjagyVBacoi+tBuMaY+HT4AGxY5DpTbH4NtMFNmjx2litRDTw61jmMOgtOUWbByRjTKVUVzWOoPvs3oJA3vnkMVS9tc7bgFGUWnIwxXWb/juYxVKWrAIHPneKNoboQMgbGOoddxoJTlFlwMsZERcVmV5r6eIFbtkYS4ejTvTFU50Jav1jnsFMsOEWZBSdjTFSpQvlqb7DvP2D/NkhKg1Fnu6q/UWf3yNWme8IgXGOMMeGIuJ58Q8bBmbdB8XveGKrnYN0LbsaY0ee5EtVRp7pewL2IlZw6yEpOxpiYaKiHrW+6MVTrXoSa/ZA+sHkM1bApcT2Gyqr1osyCkzEm5uprYOMSV6La8LJbnaBfAYy9yJWo8k6KuzFUFpyizIKTMSau1FT6jaFaCo31MPAYF6TGfg1yjm37Gt3AglOUWXAyxsSt6j2w9nnX62/r24C6titfoBowLGZZs+AUZRacjDE9woES14li9bNu1QNw7VLjZrl2qsycbs2OBacos+BkjOlx9mzxxlA9C7vWuTFUR53qSlSjz3OrAEeZBacos+BkjOnRytc0L5i4bxskpsKoGa5EdezMqI2hsnFOxhhjwss9wT3O/BkUFzUvmLh+oVvS5/hzXYnq6NNjMobKSk4dZCUnY0yv09gAW99yJap1L7iVuvtkw5gLXIlq+CmdHkNl1XpRZsHJGNOr1dfApqXeGKqXoK4a+ua5GdNPuQb65XfoslatZ4wxpuOSUuH4L7tHbZULUKufhfcehqlXR/3tYzLHhYhki8gSEdnoPWe1krafiOwQkd/67btbRLaLSGVQ2qtE5GMRWSUib4vIGG//DBFZ6R1bKSJn+J2zTEQ2eOesEpHB0bhnY4zpsVIyXLXexX+Fn2zplrWmYjUB01xgqaqOApZ6r8O5E3gjaN+LwOQQaZ9S1XGqOh6YD9zr7d8NfEVVxwGXA08EnXepqo73HjvbeS/GGHPkSM3slreJVXC6AHjM234MuDBUIhGZBOQCi/33q+pyVS0NTq+qB/xeZgDq7f9AVUu8/WuANBFJ7dQdGGOMiZpYBadcX3DxnltUpYlIAvAr4Mb2XFhErhaRzbiS07UhknwN+EBVa/z2PeJV6f1UJM5mSTTGmCNQ1IKTiLwqIqtDPC6I8BJzgEWqur0976uqv1PVo4GbgFuD8nQC8Evg+367L/Wq+6Z5j2+3ck9XikiRiBTt2rWrPdkyxhjTDlHrraeqZ4U7JiLlIpKnqqUikgeEaueZCkwTkTlAJpAiIpWq2lr7lL+ngQf93rMAeA74jqpu9svnDu/5oIg8hWvLejzMPT0EPASuK3mE+TDGGNNOsarWewHXMQHv+fngBKp6qaoOV9URwA3A420FJhEZ5ffyXGCjt38A8C/gZlV9xy99kogM8raTgfOA1R29KWOMMV0jVsFpHjBDRDYCM7zXiEihiDzc1skiMl9EioF0ESkWkdu9Q9eIyBoRWQVcT3MAvAY4BvhpUJfxVOAVEfkIWAXsAP7UdbdpjDGmI2yGiA6yGSKMMab9Ip0hIn4XmjfGGHPEsuBkjDEm7lhwMsYYE3csOBljjIk7FpyMMcbEHQtOxhhj4o4FJ2OMMXHHgpMxxpi4Y8HJGGNM3LHgZIwxJu5YcDLGGBN3orZkhjEmvtTV1VFcXMzhw4djnRVzBEhLS6OgoIDk5OQOnd+u4CQiWcAwVf2oQ+9mjImZ4uJi+vbty4gRI7AFn000qSoVFRUUFxczcuTIDl2jzWo9EVkmIv1EJBv4ELek+b0dejdjTMwcPnyYgQMHWmAyUSciDBw4sFOl9EjanPqr6gHgq8AjqjoJCLvKrTEmfllgMt2ls9+1SIJTkreU+jeAhZ16N2OMMSYCkQSnnwOvAJtU9T0ROQpv+XNjjInUvn37+P3vf9+hc++77z6qq6s7nYeioiKuvfbaTl/HZ/bs2SxYsKDF/pKSEmbNmgXAsmXLOO+880KeP2LECHbv3t1l+fG54oorWLt2batpwuV969atPPXUU62e29DQwIQJE8LeV1doMzip6t9V9URVneO93qKqX4tajowxvVI8BKfCwkIeeOCBTl+nLfn5+SH/8HeXhx9+mDFjxnTo3EiC0/3338/o0aM7dP1ItdlbT0TmA3cBh4CXgZOAH6nqk515Y6+Dxd+AEcBW4BuqujdM2n7AOuA5Vb3G23c38B0gS1Uz/dJeBVwNNACVwJWqulZERnjX2OAlXa6qV3nnTAIeBfoAi4Dr1NavN73YHS+uYW3JgS695pj8ftz2lRPCHp87dy6bN29m/PjxzJgxg8GDB/PMM89QU1PDRRddxB133EFVVRXf+MY3KC4upqGhgZ/+9KeUl5dTUlLC6aefzqBBg3j99ddDXj8zM5Orr76aV199laysLP7nf/6Hn/zkJ2zbto377ruP888/n2XLlnHPPfewcOFCbr/9drZt28aWLVvYtm0bP/rRj1otVT3++OPcc889iAgnnngiTzzxBABvvvkm9957L2VlZcyfP59Zs2axdetWzjvvPFavXh1wjYqKCi6++GJ27drF5MmTae3PzPz580lLS+Paa6/lxz/+MR9++CGvvfYaS5cu5ZFHHuHJJ59k8eLF3HbbbdTU1HD00UfzyCOPkJmZyWmnncY999xDYWEh//d//8cvf/lL8vPzGTVqFKmpqfz2t78Nm/e5c+eybt06xo8fz+WXX86Pf/zjgHwVFxfzr3/9i1tuuYV7741e37hIqvXO9jpEnAcUA8cCN3bBe88FlqrqKGCp9zqcO4E3gva9CEwOkfYpVR2nquOB+YD/p7dZVcd7j6v89j8IXAmM8h4z23crxpi2zJs3j6OPPppVq1YxY8YMNm7cyLvvvsuqVatYuXIlb775Ji+//DL5+fl8+OGHrF69mpkzZ3LttdeSn5/P66+/HjYwAVRVVXHaaaexcuVK+vbty6233sqSJUt47rnn+NnPfhbynPXr1/PKK6/w7rvvcscdd1BXVxcy3Zo1a7j77rt57bXX+PDDD7n//vubjpWWlvL222+zcOFC5s5t7c8Y3HHHHXzxi1/kgw8+4Pzzz2fbtm1h006fPp233noLcNWRlZWV1NXV8fbbbzNt2jR2797NXXfdxauvvsr7779PYWFhi2BRUlLCnXfeyfLly1myZAnr168POB4q7/PmzWPatGmsWrWKH//4x5SUlPDlL3+56Zwf/ehHzJ8/n4SE6M7hEMk4J98Iqi8Df1XVPV3U4+cC4DRv+zFgGXBTcCKvVJOLK7UV+var6nLveEB6L5D6ZACtloC8zh79VPU/3uvHgQuBl9pxL8b0KK2VcLrD4sWLWbx4MRMmTACgsrKSjRs3Mm3aNG644QZuuukmzjvvPKZNmxbxNVNSUpg50/1fOW7cOFJTU0lOTmbcuHFs3bo15DnnnnsuqamppKamMnjwYMrLyykoKGiR7rXXXmPWrFkMGjQIgOzs7KZjF154IQkJCYwZM4by8vJW8/jmm2/yj3/8o+m9s7KywqadNGkSK1eu5ODBg6SmpjJx4kSKiop46623eOCBB1i+fDlr167lC1/4AgC1tbVMnTo14Brvvvsup556alN+v/71r/PJJ5+0K+/5+fksWrQIgIULFzJ48GAmTZrEsmXLWr3XzookOL0oIutx1XpzRCQH6Ioh5rmqWgqgqqUiMjg4gYgkAL8Cvg2cGemFReRq4HogBTjD79BIEfkAOADcqqpvAUNxJUKfYm+fMSZKVJWbb76Z73//+y2OrVy5kkWLFnHzzTdz9tlnhy31BEtOTm76ZzUhIYHU1NSm7fr6+pDn+NIAJCYmhk2nqmG7RvtfI5LWgEj/uU9OTmbEiBE88sgjnHLKKZx44om8/vrrbN68mdGjR7N582ZmzJjBX//617DXaCs/7c37O++8wwsvvMCiRYs4fPgwBw4c4LLLLuPJJzvVyhNSJB0i5gJTgUJVrQOqcKWeNonIqyKyOsQjovOBOcAiVd0eYXpfnn+nqkfjSmK3ertLgeGqOgEXuJ7y2rJCfVNC/pRE5EoRKRKRol27drUnS8Yc8fr27cvBgwcB+NKXvsSf//xnKisrAdixYwc7d+6kpKSE9PR0LrvsMm644Qbef//9FufGwplnnskzzzxDRUUFAHv27OnQdaZPn85f/vIXAF566SX27g3ZzB6Q/p577mH69OlMmzaNP/zhD4wfPx4RYcqUKbzzzjts2rQJgOrq6oBSEcDkyZN544032Lt3L/X19Tz77LNt5rG1z/oXv/gFxcXFbN26laeffpozzjgjKoEJIusQkYwruUz3Iv4bwB8iubiqhh2sKyLlIpLnlZrygJ0hkk0FponIHCATSBGRSi9gRuJpXHsSqloD1HjbK0VkM679rBjwL8cXACVh7uch4CGAwsJC6zBhTDsMHDiQL3zhC4wdO5ZzzjmHSy65pKkaKjMzkycbjECXAAAevElEQVSffJJNmzZx4403kpCQQHJyMg8++CAAV155Jeeccw55eXmttjtFywknnMAtt9zCqaeeSmJiIhMmTODRRx9t93Vuu+02Lr74YiZOnMipp57K8OHDW00/bdo07r77bqZOnUpGRgZpaWlNVZ05OTk8+uijXHzxxdTU1ABw1113ceyxxzadP3ToUP77v/+bk08+mfz8fMaMGUP//v1bfc8TTzyRpKQkTjrpJGbPns03v/lNrrjiiqaqve4ibRXlRORhXLvTY96ubwMNqnpFp95Y5H+BClWdJyJzgWxV/Ukr6WfjSm/XBO2vDOqtN0pVN3rbXwFuU9VCrzpyj6o2eGO13gLGeW1o7wE/BFbgeuv9RlVb/UkUFhZqUVFRR27dmJhYt25d1Lv/mvhTWVlJZmYm9fX1XHTRRfzXf/0XF110Ube8d6jvnIisVNXCMKc0iaTN6fOqepLf69dE5MN25jGUecAzIvI9YBvwdQARKQSuaiv4eV3cLwHSRaQYeFhVbweuEZGzgDpgL3C5d8p04OciUo/rZn6VqvrK5j+guSv5S1hnCGNML3H77bfz6quvcvjwYc4++2wuvPDCWGcpIpGUnN4Hvq6qm73XRwELVHViN+QvblnJyfQ0vaXkdPLJJzdVY/k88cQTjBs3rtPXrqio4MwzW/a9Wrp0KQMHDuz09ePlPbtLtEtONwKvi8gWXOeBzwHf7UhGjTGms1asWBG1aw8cOJBVq1ZF7frx8p49QZvBSVWXisgo4DhccFoPjI92xowxxhy5Ilps0Ovp1rTAoIj8HWi9m4kxxhjTQR2df8IWhTHGGBM1HQ1ONsbHGGNM1IQNTiLyooi8EOLxItCzu5AYY7pdPCyZYes5Nevoek4jRoxg3LhxjB8/nsLCNjvddVhrbU73dPCYMca04AtOc+bMafe59913H5dddhnp6emdykNhYWFU/6D6xMN6Th3lC06XXHJJ2DSvv/560yS40RI2OKlq8BIVxpje4qW5UPZx115zyDg4Z17Yw7aeU+9Yz6m7RHdBDmOM8dh6Tr1jPScR4eyzz2bSpEk89NBDrd5vZ0TUldwY08u0UsLpDraeU89czwncshn5+fns3LmTGTNmcPzxxzN9+vRW77sjLDgZY7qdrefUtnhczwlcsAIYPHgwF110Ee+++25UglOb1Xpheu09ISLXiUhal+fIGNMr2XpOPX89p6qqqqZjVVVVLF68mLFjx7Z5zY6IpM1pC1AJ/Ml7HADKcWsh/SkquTLG9Dr+6zktWbKkaT2ncePGMWvWLA4ePMjHH3/M5MmTGT9+PHfffTe33urWCvWt53T66afHJO/+6zmddNJJXH/99R26zm233cabb77JxIkTWbx4cUTrOZWWljJ16lRyc3PDrud04oknMmXKlBZtSv7rOZ111lntXs/p17/+dUCbU3l5OV/84hc56aSTmDx5Mueee25TVWpXi2RW8jdVdXqofSKyRlVPiErO4pzNSm56mt4yK7lpn566nlMkJaccEWkK7962r4N7bXsyaowxpnvdfvvtjB8/nrFjxzJy5Mges55TJB0i/n/gbW9ZcwFGAnNEJIPm1XGNMaZb2HpO7XPPPT1zzoRIlsxY5C2ZcTzekhmqetg7fF80M2eMMcFsPacjQ5vBSUSSge/jljkHWCYif1TV0KPVjDHGmE6KpM3pQWAS8HvvMcnb12Eiki0iS0Rko/ccdiSaiPQTkR0i8lu/fXeLyHYRqQxKe5WIfCwiq0TkbREZ4+2/1NvnezSKyHjv2DIR2eB3bHBn7s0YY0znRRKcPq+ql6vqa97ju8DnO/m+c4GlqjoKWOq9DudOIHievxeBySHSPqWq41R1PDAfuBdAVf+iquO9/d8Gtqqqfzn6Ut9xVd3ZwXsyxhjTRSIJTg0icrTvhYgcBTR08n0voLkzxWNAyO4jIjIJyAUW++9X1eWqWhqcXlUP+L3MIPS6UxcD4YdUG2OMiblIgtONwOte9dcbwGu4HnydkesLLt5zi6o0EUkAfuW9f8RE5GqvZ+F8INQUw9+kZXB6xKvS+6m0MreIiFwpIkUiUrRr1672ZMuYI56t59RST1zPad++fcyaNYvjjz+e0aNH85///KfT+Q2lzeCkqkuBUbg/9NcCxwFtfktE5FURWR3icUGEeZsDLFLV7RGm9+X3d6p6NHATcGtQnk4GqlXVfx77S1V1HDDNe3y7lWs/pKqFqlqYk5PTnmwZc8SLh+BUWFjIAw880OnrtCUe1nMaM2ZMh85tKzhdd911zJw5k/Xr1/Phhx9GbWB3RBO/qmoN8JHvtYj8HWh13g1VPSvcMREpF5E8VS0VkTwgVDvPVGCaiMwBMoEUEalU1dbnpG/2NC07bnyLoFKTqu7wng+KyFO4tqzHI3wPY3qkX777S9bvWd92wnY4Pvt4bpp8U9jjtp5Tz1/P6cCBA7z55ps8+uijgJsJPiUlJew9dEZH13OKbFrd8F4ALve2LweeD06gqpeq6nBVHQHcADzeVmDyxmP5nAts9DuWAHwdF7R8+5JEZJC3nQycBwR+m4wxXcLWc+r56zlt2bKFnJwcvvvd7zJhwgSuuOIKqqqqWr3njurokhmRza0e3jzgGRH5HrANFzQQkULgKlW9orWTRWQ+cAmQLiLFwMOqejtwjYicBdQBe2kOgODGaRWr6ha/fanAK15gSgRexSazNUeA1ko43cHWc+qZ6znV19fz/vvv85vf/IaTTz6Z6667jnnz5nHnnXe2et8dETY4iciLhA5CAnRqTg1VrQBazNehqkVAi8Ckqo8Cj/q9/gnwkxDprmvlPZcBU4L2VeHGbRljupGt59S2eFzPqaCggIKCAk4++WQAZs2axbx50Vm4srVqvXtwveWCH/cAX27lPGOMacHWc+r56zkNGTKEYcOGsWHDBsDN/9fRjhdtCVtyUtXgga/GGNNh/us5nXPOOU3rOYHrzPDkk0+yadMmbrzxRhISEkhOTubBB12fJt96Tnl5ea22O0WL/3pOiYmJTJgwoalTQHvcdtttXHzxxUycOJFTTz01ovWc7r77bqZOnUpGRkbY9Zx8E+HeddddHHvssU3n+6/nlJ+f3+71nGbPns03v/lNrrjiiqaqvd/85jdceuml1NbWctRRR/HII4+0+3OIRJvrOZnQbD0n09PYek5Hpt68npMxxpgeqjev59RERIaoalm0MmOMMW2x9Zzap9eu5xRkETAxGhkxxphI2HpOR4b2Vut1dvCtMSaGrI3ZdJfOftfaG5xsgKoxPVRaWhoVFRUWoEzUqSoVFRWkpaV1+BrtqtZT1Y7N2miMibmCggKKi4uxGfVNd0hLSws520akOjp9kTGmh0lOTmbkyJGxzoYxEbGu5MYYY+KOBSdjjDFxx4KTMcaYuGPByRhjTNyx4GSMMSbuWHAyxhgTdyw4GWOMiTsWnIwxxsSdmAUnEckWkSUistF7zmolbT8R2SEiv/Xbd7eIbBeRyjDnzBIRFZFCv303i8gmEdkgIl/y2z/T27dJROZ21T0aY4zpmFiWnOYCS1V1FLDUex3OnUDwyrwvApNDJRaRvsC1wAq/fWOAbwEnADOB34tIoogkAr8DzgHGABd7aY0xxsRILIPTBcBj3vZjQMgVsERkEpALLPbfr6rLVbU0zLXvBOYDh4Pe72lVrVHVT4FNuOA2GdikqltUtRZ42ktrjDEmRmIZnHJ9wcV7HhycQEQSgF8BN0Z6URGZAAxT1YVBh4YC2/1eF3v7wu0Pde0rRaRIRIps8kxjjImeqE78KiKvAkNCHLolwkvMARap6naRtpeS8oLZr4HZoQ6H2KeEDtAh1xRQ1YeAhwAKCwtt3QFjjImSqAYnVT0r3DERKReRPFUtFZE8YGeIZFOBaSIyB8gEUkSkUlXDtU/1BcYCy7xgNgR4QUTOx5WIhvmlLQBKvO1w+40xxsRALJfMeAG4HJjnPT8fnEBVL/Vti8hsoLCVwISq7gcG+Z2zDLhBVYtE5BDwlIjcC+QDo4B3cSWqUSIyEtiB6zRxSWdvzhhjTMfFss1pHjBDRDYCM7zXiEihiDzc1skiMl9EioF0ESkWkdtbS6+qa4BngLXAy8DVqtqgqvXANcArwDrgGS+tMcaYGBFbsrljCgsLtaioKNbZMMaYHkVEVqpqYVvpbIYIY4wxcceCkzHGmLhjwckYY0zcseBkjDEm7lhwMsYYE3csOBljjIk7FpyMMcbEHQtOxhhj4o4FJ2OMMXHHgpMxxpi4Y8HJGGNM3LHgZIwxJu5YcDLGGBN3LDgZY4yJOxacjDHGxB0LTsYYY+KOBSdjjDFxJybBSUSyRWSJiGz0nrNaSdtPRHaIyG/99t0tIttFpDLMObNEREWk0Hs9Q0RWisjH3vMZfmmXicgGEVnlPQZ35b0aY4xpv1iVnOYCS1V1FLDUex3OncAbQfteBCaHSiwifYFrgRV+u3cDX1HVccDlwBNBp12qquO9x87Ib8MYY0w0xCo4XQA85m0/BlwYKpGITAJygcX++1V1uaqWhrn2ncB84LBf+g9UtcR7uQZIE5HUjmffGGNMNMUqOOX6gov33KIqTUQSgF8BN0Z6URGZAAxT1YWtJPsa8IGq1vjte8Sr0vupiEik72eMMSY6kqJ1YRF5FRgS4tAtEV5iDrBIVbdHEi+8YPZrYHYraU4Afgmc7bf7UlXd4VUHPgt8G3g8zPlXAlcCDB8+PLK7MMYY025RC06qela4YyJSLiJ5qloqInlAqHaeqcA0EZkDZAIpIlKpquHap/oCY4FlXjAbArwgIuerapGIFADPAd9R1c1++dzhPR8UkadwbVkhg5OqPgQ8BFBYWKit3b8xxpiOi1W13gu4jgl4z88HJ1DVS1V1uKqOAG4AHm8lMKGq+1V1kKqO8M5ZDvgC0wDgX8DNqvqO7xwRSRKRQd52MnAesLpL7tAYY0yHxSo4zQNmiMhGYIb3GhEpFJGH2zpZROaLSDGQLiLFInJ7G6dcAxwD/DSoy3gq8IqIfASsAnYAf+rwXRljjOkSomq1Ux1RWFioRUVFsc6GMcb0KCKyUlUL20pnM0QYY4yJOxacjDHGxB0LTsYYY+KOBSdjjDFxx4KTMcaYuGPByRhjTNyx4GSMMSbuWHAyxhgTdyw4GWOMiTsWnIwxxsQdC07GGGPijgUnY4wxcceCkzHGmLhjwckYY0zcseBkjDEm7kRtmXYT2hP/2cpnFdVkZaSQnZFCVrp7zs5IJis9hQHpKSQmSKyzaYw5wh2ua2BfdR17qmrZW+09qmrZU1XH7FNG0D89Oarvb8Gpm723dS9L1pZzqK4h5HER6N8nmez0FAakJwcEsKyMFLLTvWcvmGVnpNAvLZkEC2jGmDBq6v0CTVUte6pr2Vtd5wUbX/AJfF1dG/pvFMDMsUMsOPU2D1w8AYBDtQ1+/43UuS+L3xfD97xj32FW7zjAnupaausbQ14zQfBKXZEFs6yMFPqmJiFiAc2YnsYXaJr+Tnh/P/b5gk5VLXuq69jXdLyWqlYCTd/UJLK8vwuDMlMYNTgzoGYnKz054PWA9GSSE6PfIhSz4CQi2cDfgBHAVuAbqro3TNp+wDrgOVW9xtt3N/AdIEtVM0OcMwv4O/B5VS0SkRHeNTZ4SZar6lVe2knAo0AfYBFwnUZ5/fo+KYn0SelD/oA+EaVXVap9Aa2VYLanqpbPKqr5YPs+9lbVUt8Y+jaSEsR9IdOT2w5m3nN6SqIFNGO6UG19owsi3u/1Xr+Astc/APn9I1tZUx/2en1TkxiQ4WpesjNSOCYnkwHp3u+z9/s9oOn3PZkBfVJISYrPrgexLDnNBZaq6jwRmeu9vilM2juBN4L2vQj8FtgYnFhE+gLXAiuCDm1W1fEhrv8gcCWwHBecZgIvRXgf3UJEyEhNIiM1iYKsyM5RVSpr6tsMZnur6ti4s9L7haglTDwjJSkhfDAL+u8q29tOS07sug/BmDhW19DY/M9jVa1f0HHtNAGvq2vZV1XHwVYCTWZqElneP4lZ6SkcnZMZsiSTlZHcFHTiNdB0RCyD0wXAad72Y8AyQgQnr1STC7wMFPr2q+py73ioa98JzAduaCsTIpIH9FPV/3ivHwcuJM6CU0eICH3TkumblszwgekRndPYqBw8XM8ev//g/H+hfL9oe6trWVdygL3Vtew7VEe4cmaf5MQWv0zNz8lBpTVXZZCaZAHNxFZdQ2NQ1VlQScb3z53XTrO3qrbVQJORkuj3HU9h5KCM5pJM0+9AckDV2ZH+exDL4JSrqqUAqloqIoODE4hIAvAr4NvAmZFcVEQmAMNUdaGIBAenkSLyAXAAuFVV3wKGAsV+aYq9fUekhAShf3oy/dOTGTkoI6JzGhqV/YfqgkpjLYPZnqpatu2pZm9VLQcOR/aL3FYw6846cNMz+QLNvoAag7rm3mfVLYPPwTa+nwP8ag9GDkwPeJ0dVLqxQNMxUQ1OIvIqMCTEoVsivMQcYJGqbo+krcMLZr8GZoc4XAoMV9UKrzT2TxE5AQh14ZDlABG5Elf9x/DhwyO6gSNBYoI0VeNFKtR/pqGC2d7qWrbsrmy7rj0tKeJglpWebF32e6j6hkb2HaprCib+/xDtqw787viCUWv/CKWnJDZVjWWlp/C5gelN1Wih2mkGpCdbVXU3iWpwUtWzwh0TkXIRyfNKTXnAzhDJpgLTRGQOkAmkiEilqs4Nc9m+wFhgmRfMhgAviMj5qloE1Hj5Wikim4FjcSWlAr9rFAAlYe7nIeAhgMLCwqh2mOjtkhMTyOmbSk7f1IjPCdkdNkQw23nwMBvKDrKnqjaiLvtZ4YJZ07Fk67IfBQ2Nyr7qNkoyQa/3H6oLe70+yYlNDf1Z6SkMz04PaJfx/8fF99oCTfyKZbXeC8DlwDzv+fngBKp6qW9bRGYDha0EJlR1PzDI75xlwA1eb70cYI+qNojIUcAoYIuq7hGRgyIyBdeB4jvAb7rg/kwXS01KJLdfIrn90iI+x9dlv2WVY/Mfvn3VtezYd4jVO/azp6qW2obWu+xnhWgjCO7C76vWOVK67DcHmvDtNM3VanVeiSZ8W2VackJAibcgKz2g082A9JY/Aws0vUssg9M84BkR+R6wDfg6gIgUAlep6hWtnSwi84FLgHQRKQYeVtXbWzllOvBzEakHGrz32OMd+wHNXclfohd0hjBOR7vst+zVGPxffC1bd1fz/rbIuuxHFMzipMu+fxticDvNvqBAv6/a9QTd30qnmNSkhID7HZqV3qLXZ8Dr9BT6pFigOdJJlIfz9FqFhYVaVFQU62yYOKCqHKypD+qqH1gy8x8sGUmX/dbGmzW3gyS32WW/0RdowlaVBVaptdX7MiUpgYG+kotf3lxJJriLs8unBRrjT0RWqmphW+lshghjOklE6JeWTL+0ZD43MLIejo2NyoHDda2WzHxBY23JAS/IRdbekpqU2BRs9h+qiygIZqUnMzq/X4t2tubg4173SbaB2KZ7WHAyJgYSEoQBXi+wSNU3NLL/UF1T4ArXU+1wXQOjh/RrGpyZFVSS8XUGiHX1oTGtseBkTA+RlJjAwMxUBmZG3sPRmJ7KRi4aY4yJOxacjDHGxB0LTsYYY+KOBSdjjDFxx4KTMcaYuGPByRhjTNyx4GSMMSbuWHAyxhgTd2xuvQ4SkV3AZx08fRCwuwuz01UsX+1j+Wofy1f79NZ8fU5Vc9pKZMEpBkSkKJKJD7ub5at9LF/tY/lqnyM9X1atZ4wxJu5YcDLGGBN3LDjFxkOxzkAYlq/2sXy1j+WrfY7ofFmbkzHGmLhjJSdjjDFxx4JTFxORRBH5QEQWhjiWKiJ/E5FNIrJCREb4HbvZ279BRL7Uzfm6XkTWishHIrJURD7nd6xBRFZ5jxe6Ol8R5G22iOzyy8MVfscuF5GN3uPybszTr/3y84mI7PM7FtXPS0S2isjH3vWLQhwXEXnA+y59JCIT/Y5F8/NqK1+Xevn5SET+LSInRXpulPN1mojs9/uZ/czv2Ezv93GTiMzt5nzd6Jen1d73KjuSczuZrwEiskBE1ovIOhGZGnS8+75fqmqPLnwA1wNPAQtDHJsD/MHb/hbwN297DPAhkAqMBDYDid2Yr9OBdG/7B758ea8rY/yZzQZ+G2J/NrDFe87ytrO6I09B6X4I/Lm7Pi9gKzColeNfBl4CBJgCrOimz6utfJ3iez/gHF++Ijk3yvk6Lcz3LtH7PTwKSPF+P8d0V76C0n4FeK2bPq/HgCu87RRgQKy+X1Zy6kIiUgCcCzwcJskFuB8+wALgTBERb//Tqlqjqp8Cm4DJ3ZUvVX1dVau9l8uBgq56787mrRVfApao6h5V3QssAWbGIE8XA3/tivftIhcAj6uzHBggInlE8fOKhKr+23tf6ObvWAdNBjap6hZVrQWexn22sdAt3zER6QdMB/4PQFVrVXVfULJu+35ZcOpa9wE/ARrDHB8KbAdQ1XpgPzDQf7+n2NvXXfny9z3cf0Y+aSJSJCLLReTCLsxTe/L2Na8KYYGIDPP2RfMzi+jz8qo/RwKv+e2O9uelwGIRWSkiV4Y4Hu5zifZ3rK18+Qv+jrXn3Gjka6qIfCgiL4nICd6+uPi8RCQd90f+2fae2wFHAbuAR7wq7YdFJCMoTbd9v5I6c7JpJiLnATtVdaWInBYuWYh92sr+7sqXL+1lQCFwqt/u4apaIiJHAa+JyMequrkb8/Yi8FdVrRGRq3AlzzOI0mfWns8LVzW7QFUb/PZF7fPyfMG7/mBgiYisV9U3/W8hxDlR/Y5FmC+XOZHTccHpi+09N0r5eh83nU6liHwZ+Ccwijj5vHBVeu+o6p4OnNteScBE4IequkJE7gfmAj/1S9Nt3y8rOXWdLwDni8hWXBXAGSLyZFCaYmAYgIgkAf2BPf77PQVASTfmCxE5C7gFOF9Va3z7VbXEe94CLAMmdFG+Isqbqlb45edPwCRvO1qfWUSfl+dbBFW3RPnz8r/+TuA5Wlb/hvtcovkdiyRfiMiJuKrSC1S1oj3nRitfqnpAVSu97UVAsogMIg4+L09r37Gu/ryKgWJVXeG9XoALVsFpuuf7FY1GtSP9QfhG1qsJ7BDxjLd9AoEdIrbQxR0i2sjXBFzj76ig/VlAqrc9CNhIFzYKR5i3PL/ti4Dl3nY28KmXxyxvO7s78uQdOw7XMC3d9XkBGUBfv+1/AzOD0pxLYIP1u9H+vCLM13BcW+op7T03yvka4vsZ4v7Ib/M+uyTv93AkzR0iTuiufHnHfP+8ZnTH5+Vd8y3gOG/7duB/Y/X9smq9KBORnwNFqvoCrqHxCRHZhPvSfQtAVdeIyDPAWqAeuFoDq4qina//BTKBv7v+GWxT1fOB0cAfRaQRV8qep6pro5mvEHm7VkTOx30ue3C991DVPSJyJ/Ced9rPNbDqI5p5AtdI/bR6v5meaH9eucBz3s8oCXhKVV/2qjtR1T8Ai3A9qjYB1cB3vWPR/LwiydfPcO2rv/fS1aubPDTkud2Yr1nAD0SkHjgEfMv7mdaLyDXAK7iee39W1TXdmC9w/4wtVtWqts7tonyB6336FxFJwQXn78bq+2UzRBhjjIk71uZkjDEm7lhwMsYYE3csOBljjIk7FpyMMcbEHQtOxhhj4o4FJ2OMMXHHgpMxvZi45RUGdfDc2SKS3xXXMqa9LDgZY8KZDeS3lciYaLDgZEw3EJER4hZwe1jc4nF/EZGzROQdb3G2yd7j396M0P8WkeO8c68XkT972+O889PDvM9AEVnsXeOP+E3IKSKXici74hap+6OIJHr7K0XkVyLyvrjFJnNEZBZuEuC/eOn7eJf5oZfuYxE5PpqfmTmyWXAypvscA9wPnAgcD1yCm537BuC/gfXAdFWdgJvu53+88+4DjhGRi4BHgO9r8/pbwW4D3vau8QJuTjtEZDTwTdyM1uOBBuBS75wM4H1VnQi8AdymqguAIuBSVR2vqoe8tLu9dA96+TYmKmxuPWO6z6eq+jGAiKwBlqqqisjHwAjcRJ+Picgo3HIDyQCq2igis4GPgD+q6jutvMd04Kveef8SEd8Cf2fiZnR/z5uXrQ+w0zvWCPzN234S+Ecr1/cdW+l7H2OiwYKTMd2nxm+70e91I+538U7gdVW9SERG4Jbc8BkFVBJZG1CoCTMFeExVb+7g+T6+PDdgfz9MFFm1njHxoz+ww9ue7dspIv1x1YHTgYFee1A4b+JV14nIObjlCwCWArO8BeoQkWxxK/mC+zvgu+YlwNve9kGgbyfux5gOs+BkTPyYD/xCRN7BLdPg82vg96r6CW4V2Xm+IBPCHcB0EXkfOBu3PhHe0h234pb3/ghYAuR551QBJ4jIStwqwz/39j8K/CGoQ4Qx3cKWzDDmCCcilaqaGet8GOPPSk7GGGPijpWcjOmBROS7wHVBu99R1atjkR9jupoFJ2OMMXHHqvWMMcbEHQtOxhhj4o4FJ2OMMXHHgpMxxpi4Y8HJGGNM3Pl/+k4O5k4nPfoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f26fb936cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_2.best_score_, gsearch2_2.best_params_))\n",
    "test_means = gsearch2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(min_child_weight), len(max_depth))\n",
    "train_scores = np.array(train_means).reshape(len(min_child_weight), len(max_depth))\n",
    "\n",
    "for i, value in enumerate(min_child_weight):\n",
    "    pyplot.plot(max_depth, test_scores[i], label= 'test_min_child_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( '- Log Loss' )\n",
    "pyplot.savefig( 'max_depth_vs_min_child_weght2.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 再次调整弱分类器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit_1(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        #xgb_param['num_class'] = 9\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='logloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print (cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('2_my_preds4_2_3_157.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-logloss-mean']\n",
    "        test_stds = cvresult['test-logloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-logloss-mean']\n",
    "        train_stds = cvresult['train-logloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost 2_n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( '2_n_estimators.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='logloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     test-logloss-mean  test-logloss-std  train-logloss-mean  \\\n",
      "0             0.649447          0.000265            0.649347   \n",
      "1             0.613757          0.000351            0.613525   \n",
      "2             0.584080          0.000318            0.583769   \n",
      "3             0.559607          0.000171            0.559231   \n",
      "4             0.539112          0.000199            0.538632   \n",
      "5             0.521941          0.000237            0.521371   \n",
      "6             0.507475          0.000450            0.506836   \n",
      "7             0.495489          0.000355            0.494743   \n",
      "8             0.484629          0.000170            0.483735   \n",
      "9             0.475755          0.000238            0.474745   \n",
      "10            0.467996          0.000415            0.466888   \n",
      "11            0.461611          0.000564            0.460420   \n",
      "12            0.456153          0.000697            0.454893   \n",
      "13            0.451616          0.000776            0.450281   \n",
      "14            0.447550          0.000769            0.446161   \n",
      "15            0.444125          0.000833            0.442607   \n",
      "16            0.441188          0.000826            0.439524   \n",
      "17            0.438802          0.000741            0.437076   \n",
      "18            0.436625          0.000790            0.434784   \n",
      "19            0.434544          0.000875            0.432603   \n",
      "20            0.433104          0.000863            0.431057   \n",
      "21            0.431768          0.000841            0.429657   \n",
      "22            0.430704          0.000846            0.428530   \n",
      "23            0.429538          0.000892            0.427245   \n",
      "24            0.428564          0.000932            0.426210   \n",
      "25            0.427542          0.001228            0.425108   \n",
      "26            0.426629          0.001123            0.424098   \n",
      "27            0.425703          0.001004            0.423076   \n",
      "28            0.425055          0.000976            0.422328   \n",
      "29            0.424440          0.001098            0.421651   \n",
      "..                 ...               ...                 ...   \n",
      "167           0.414240          0.001508            0.396000   \n",
      "168           0.414193          0.001542            0.395882   \n",
      "169           0.414235          0.001546            0.395751   \n",
      "170           0.414222          0.001500            0.395671   \n",
      "171           0.414213          0.001495            0.395572   \n",
      "172           0.414213          0.001529            0.395459   \n",
      "173           0.414158          0.001491            0.395381   \n",
      "174           0.414138          0.001491            0.395314   \n",
      "175           0.414136          0.001488            0.395234   \n",
      "176           0.414124          0.001499            0.395144   \n",
      "177           0.414092          0.001494            0.395054   \n",
      "178           0.414110          0.001480            0.394974   \n",
      "179           0.414109          0.001455            0.394868   \n",
      "180           0.414079          0.001408            0.394752   \n",
      "181           0.414037          0.001394            0.394625   \n",
      "182           0.414035          0.001362            0.394542   \n",
      "183           0.414022          0.001321            0.394473   \n",
      "184           0.414008          0.001336            0.394401   \n",
      "185           0.413982          0.001330            0.394321   \n",
      "186           0.413972          0.001314            0.394214   \n",
      "187           0.413960          0.001339            0.394150   \n",
      "188           0.413955          0.001306            0.394048   \n",
      "189           0.413937          0.001259            0.393974   \n",
      "190           0.413941          0.001263            0.393858   \n",
      "191           0.413963          0.001262            0.393768   \n",
      "192           0.413904          0.001269            0.393612   \n",
      "193           0.413870          0.001234            0.393480   \n",
      "194           0.413899          0.001216            0.393371   \n",
      "195           0.413895          0.001186            0.393287   \n",
      "196           0.413858          0.001229            0.393152   \n",
      "\n",
      "     train-logloss-std  \n",
      "0             0.000195  \n",
      "1             0.000396  \n",
      "2             0.000492  \n",
      "3             0.000547  \n",
      "4             0.000492  \n",
      "5             0.000426  \n",
      "6             0.000299  \n",
      "7             0.000456  \n",
      "8             0.000748  \n",
      "9             0.000804  \n",
      "10            0.000904  \n",
      "11            0.000854  \n",
      "12            0.000927  \n",
      "13            0.000992  \n",
      "14            0.001249  \n",
      "15            0.001466  \n",
      "16            0.001471  \n",
      "17            0.001389  \n",
      "18            0.001343  \n",
      "19            0.001248  \n",
      "20            0.001214  \n",
      "21            0.001214  \n",
      "22            0.001155  \n",
      "23            0.001056  \n",
      "24            0.001073  \n",
      "25            0.000862  \n",
      "26            0.000949  \n",
      "27            0.000997  \n",
      "28            0.001137  \n",
      "29            0.000978  \n",
      "..                 ...  \n",
      "167           0.000846  \n",
      "168           0.000849  \n",
      "169           0.000890  \n",
      "170           0.000915  \n",
      "171           0.000920  \n",
      "172           0.000883  \n",
      "173           0.000908  \n",
      "174           0.000933  \n",
      "175           0.000959  \n",
      "176           0.000975  \n",
      "177           0.000944  \n",
      "178           0.000970  \n",
      "179           0.000945  \n",
      "180           0.000940  \n",
      "181           0.000932  \n",
      "182           0.000931  \n",
      "183           0.000900  \n",
      "184           0.000920  \n",
      "185           0.000907  \n",
      "186           0.000932  \n",
      "187           0.000950  \n",
      "188           0.000910  \n",
      "189           0.000897  \n",
      "190           0.000896  \n",
      "191           0.000923  \n",
      "192           0.000919  \n",
      "193           0.000906  \n",
      "194           0.000903  \n",
      "195           0.000885  \n",
      "196           0.000929  \n",
      "\n",
      "[197 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.39715577802859797\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f27083ec4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators(6,4)\n",
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=3)\n",
    "\n",
    "modelfit_1(xgb2_3, X_train, y_train, cv_folds = kfold)\n",
    "#from sklearn.model_selection import cross_val_score\n",
    "#results = cross_val_score(xgb2_3, X_train, y_train, metrics='mlogloss', cv=kfold)\n",
    "#print results\n",
    "#print(\"CV logloss: %.2f%% (%.2f%%)\" % (results.mean()*100, results.std()*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'base_score': 0.5,\n",
       " 'booster': 'gbtree',\n",
       " 'colsample_bylevel': 0.7,\n",
       " 'colsample_bytree': 0.8,\n",
       " 'gamma': 0,\n",
       " 'learning_rate': 0.1,\n",
       " 'max_delta_step': 0,\n",
       " 'max_depth': 5,\n",
       " 'min_child_weight': 5,\n",
       " 'missing': None,\n",
       " 'n_estimators': 197,\n",
       " 'nthread': 1,\n",
       " 'objective': 'binary:logistic',\n",
       " 'reg_alpha': 0,\n",
       " 'reg_lambda': 1,\n",
       " 'scale_pos_weight': 1,\n",
       " 'seed': 3,\n",
       " 'silent': 1,\n",
       " 'subsample': 0.3}"
      ]
     },
     "execution_count": 185,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_3.get_xgb_params()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 'n_estimators': 197,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f27080b3b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as pyplot\n",
    "cvresult = pd.DataFrame.from_csv('2_my_preds4_2_3_157.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-logloss-mean']\n",
    "test_stds = cvresult['test-logloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-logloss-mean']\n",
    "train_stds = cvresult['train-logloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( '2_n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f270a3e43c8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('2_my_preds4_2_3_157.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[20:]\n",
    "# plot\n",
    "test_means = cvresult['test-logloss-mean']\n",
    "test_stds = cvresult['test-logloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-logloss-mean']\n",
    "train_stds = cvresult['train-logloss-std'] \n",
    "\n",
    "x_axis = range(20,cvresult.shape[0]+20)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail4_2_3_157.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四步：调整树的参数：subsample 和 colsample_bytree\n",
    "\n",
    "(粗调，参数的步长为0.1；下一步是在粗调最佳参数周围，将步长降为0.05，进行精细调整)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.85, 0.9, 0.95], 'subsample': [0.8, 0.85, 0.9]}"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "#subsample = [i/10.0 for i in range(3,9)]\n",
    "subsample=[0.8,0.85,0.9]\n",
    "#colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "colsample_bytree=[0.85,0.9,0.95]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.41020, std: 0.00087, params: {'colsample_bytree': 0.85, 'subsample': 0.8},\n",
       "  mean: -0.41018, std: 0.00118, params: {'colsample_bytree': 0.85, 'subsample': 0.85},\n",
       "  mean: -0.41026, std: 0.00096, params: {'colsample_bytree': 0.85, 'subsample': 0.9},\n",
       "  mean: -0.41009, std: 0.00089, params: {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       "  mean: -0.41001, std: 0.00085, params: {'colsample_bytree': 0.9, 'subsample': 0.85},\n",
       "  mean: -0.41008, std: 0.00097, params: {'colsample_bytree': 0.9, 'subsample': 0.9},\n",
       "  mean: -0.41025, std: 0.00106, params: {'colsample_bytree': 0.95, 'subsample': 0.8},\n",
       "  mean: -0.41034, std: 0.00105, params: {'colsample_bytree': 0.95, 'subsample': 0.85},\n",
       "  mean: -0.41008, std: 0.00089, params: {'colsample_bytree': 0.95, 'subsample': 0.9}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.85},\n",
       " -0.4100096852657063)"
      ]
     },
     "execution_count": 196,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=197,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([31.38595815, 30.78249435, 30.95299039, 32.2982502 , 31.75257039,\n",
       "        31.31025033, 31.86353602, 32.37392168, 19.20862069]),\n",
       " 'mean_score_time': array([0.31081924, 0.29645967, 0.29950747, 0.29876032, 0.29956131,\n",
       "        0.29267101, 0.27837057, 0.28075991, 0.15971313]),\n",
       " 'mean_test_score': array([-0.41019856, -0.41017659, -0.41025983, -0.41009348, -0.41000969,\n",
       "        -0.41007913, -0.41024977, -0.41034071, -0.41007888]),\n",
       " 'mean_train_score': array([-0.39098362, -0.3905873 , -0.39089249, -0.39039233, -0.39046773,\n",
       "        -0.39052166, -0.39048985, -0.39064809, -0.39057688]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.85, 0.85, 0.85, 0.9, 0.9, 0.9, 0.95, 0.95, 0.95],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.8, 0.85, 0.9, 0.8, 0.85, 0.9, 0.8, 0.85, 0.9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.85, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.85, 'subsample': 0.85},\n",
       "  {'colsample_bytree': 0.85, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.85},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.95, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.95, 'subsample': 0.85},\n",
       "  {'colsample_bytree': 0.95, 'subsample': 0.9}],\n",
       " 'rank_test_score': array([6, 5, 8, 4, 1, 3, 7, 9, 2], dtype=int32),\n",
       " 'split0_test_score': array([-0.41039967, -0.40984265, -0.40968428, -0.40965899, -0.40960909,\n",
       "        -0.41034518, -0.40989859, -0.41016132, -0.4100029 ]),\n",
       " 'split0_train_score': array([-0.3912964 , -0.3909611 , -0.3911756 , -0.39019527, -0.39025713,\n",
       "        -0.39064579, -0.39053738, -0.39065978, -0.39131481]),\n",
       " 'split1_test_score': array([-0.4114963 , -0.41202639, -0.41209059, -0.41170041, -0.41153597,\n",
       "        -0.41153198, -0.41223443, -0.4122234 , -0.41156926]),\n",
       " 'split1_train_score': array([-0.39076273, -0.390066  , -0.39054416, -0.38971749, -0.39068693,\n",
       "        -0.38940711, -0.390108  , -0.39076564, -0.3905988 ]),\n",
       " 'split2_test_score': array([-0.40901035, -0.40851483, -0.40933513, -0.40908735, -0.40899084,\n",
       "        -0.40874208, -0.40913985, -0.40912841, -0.40889436]),\n",
       " 'split2_train_score': array([-0.39148483, -0.39098354, -0.39149055, -0.39073519, -0.3911383 ,\n",
       "        -0.39147046, -0.39134778, -0.3910315 , -0.39102422]),\n",
       " 'split3_test_score': array([-0.40951559, -0.40968357, -0.41005851, -0.40969573, -0.40980813,\n",
       "        -0.40932004, -0.40968973, -0.40967921, -0.40960077]),\n",
       " 'split3_train_score': array([-0.39073549, -0.39094985, -0.39089459, -0.39053623, -0.38964264,\n",
       "        -0.39026169, -0.39040586, -0.39052055, -0.38997734]),\n",
       " 'split4_test_score': array([-0.41057087, -0.41081554, -0.41013068, -0.41032495, -0.41010443,\n",
       "        -0.41045634, -0.41028629, -0.41051123, -0.4103271 ]),\n",
       " 'split4_train_score': array([-0.39063867, -0.389976  , -0.39035756, -0.39077747, -0.39061364,\n",
       "        -0.39082324, -0.39005025, -0.39026297, -0.38996922]),\n",
       " 'std_fit_time': array([0.09899085, 0.20945182, 0.29822962, 0.14457703, 0.41991748,\n",
       "        0.08259983, 0.2507856 , 0.64178684, 1.97057119]),\n",
       " 'std_score_time': array([0.00815458, 0.00701981, 0.00714543, 0.00882403, 0.00737324,\n",
       "        0.00949588, 0.00515282, 0.02317036, 0.01630974]),\n",
       " 'std_test_score': array([0.00086503, 0.00117864, 0.00095866, 0.00089387, 0.00084589,\n",
       "        0.00096826, 0.00105915, 0.00105004, 0.00088546]),\n",
       " 'std_train_score': array([0.00034011, 0.00046338, 0.00041117, 0.00039518, 0.00049883,\n",
       "        0.00068065, 0.00046571, 0.00025516, 0.00054292])}"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.410010 using {'colsample_bytree': 0.9, 'subsample': 0.85}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f270b4987f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第五步：调整正则化参数：reg_alpha 和reg_lambda\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1, 1.5, 2, 2.5, 3], 'reg_lambda': [0.05, 0.1, 0.5, 1.5, 2]}"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reg_alpha = [1e-3, 1e-2, 0.05, 0.1]    #default = 0\n",
    "#reg_lambda = [1e-3, 1e-2, 0.05, 0.1]   #default = 1\n",
    "\n",
    "reg_alpha = [ 1,1.5, 2,2.5,3]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.05,0.1,0.5, 1.5,2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.40993, std: 0.00092, params: {'reg_alpha': 1, 'reg_lambda': 0.05},\n",
       "  mean: -0.40996, std: 0.00103, params: {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       "  mean: -0.40983, std: 0.00094, params: {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  mean: -0.41023, std: 0.00102, params: {'reg_alpha': 1, 'reg_lambda': 1.5},\n",
       "  mean: -0.41014, std: 0.00099, params: {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  mean: -0.41010, std: 0.00105, params: {'reg_alpha': 1.5, 'reg_lambda': 0.05},\n",
       "  mean: -0.40989, std: 0.00066, params: {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  mean: -0.41022, std: 0.00079, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.40995, std: 0.00093, params: {'reg_alpha': 1.5, 'reg_lambda': 1.5},\n",
       "  mean: -0.41008, std: 0.00106, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.41011, std: 0.00088, params: {'reg_alpha': 2, 'reg_lambda': 0.05},\n",
       "  mean: -0.41004, std: 0.00098, params: {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  mean: -0.40978, std: 0.00087, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.41015, std: 0.00121, params: {'reg_alpha': 2, 'reg_lambda': 1.5},\n",
       "  mean: -0.40997, std: 0.00112, params: {'reg_alpha': 2, 'reg_lambda': 2},\n",
       "  mean: -0.41003, std: 0.00103, params: {'reg_alpha': 2.5, 'reg_lambda': 0.05},\n",
       "  mean: -0.40994, std: 0.00095, params: {'reg_alpha': 2.5, 'reg_lambda': 0.1},\n",
       "  mean: -0.40973, std: 0.00091, params: {'reg_alpha': 2.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.41026, std: 0.00100, params: {'reg_alpha': 2.5, 'reg_lambda': 1.5},\n",
       "  mean: -0.41000, std: 0.00100, params: {'reg_alpha': 2.5, 'reg_lambda': 2},\n",
       "  mean: -0.40975, std: 0.00086, params: {'reg_alpha': 3, 'reg_lambda': 0.05},\n",
       "  mean: -0.40997, std: 0.00105, params: {'reg_alpha': 3, 'reg_lambda': 0.1},\n",
       "  mean: -0.40995, std: 0.00125, params: {'reg_alpha': 3, 'reg_lambda': 0.5},\n",
       "  mean: -0.41000, std: 0.00094, params: {'reg_alpha': 3, 'reg_lambda': 1.5},\n",
       "  mean: -0.41017, std: 0.00109, params: {'reg_alpha': 3, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 2.5, 'reg_lambda': 0.5},\n",
       " -0.4097279402334093)"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=197,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample=0.85,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'binary:logistic',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([32.49238567, 32.10237594, 32.14324098, 31.62502937, 31.70541468,\n",
       "        31.6589541 , 31.41028523, 31.33510513, 31.47901974, 31.60633245,\n",
       "        32.62688518, 31.6011342 , 31.80557094, 31.35113654, 31.30304947,\n",
       "        31.71845264, 31.30195632, 31.56543612, 31.49913812, 31.44211798,\n",
       "        31.74451451, 31.02363191, 31.58112435, 31.46695042, 20.50541558]),\n",
       " 'mean_score_time': array([0.29644771, 0.29300723, 0.29376807, 0.28808141, 0.28662629,\n",
       "        0.29287291, 0.2907167 , 0.28561502, 0.28618374, 0.28257909,\n",
       "        0.28759279, 0.28764853, 0.28901243, 0.28388424, 0.28529048,\n",
       "        0.2939507 , 0.28938012, 0.2916069 , 0.28302379, 0.28229995,\n",
       "        0.29080091, 0.28316908, 0.28471856, 0.28644691, 0.16672559]),\n",
       " 'mean_test_score': array([-0.40993333, -0.40996296, -0.40982565, -0.41022766, -0.410144  ,\n",
       "        -0.41009987, -0.40989046, -0.41021637, -0.40995242, -0.41008164,\n",
       "        -0.41010735, -0.41003581, -0.40978279, -0.41015017, -0.40996524,\n",
       "        -0.41002946, -0.40993978, -0.40972794, -0.41025751, -0.41000194,\n",
       "        -0.40974746, -0.40997295, -0.40994862, -0.41000252, -0.41017036]),\n",
       " 'mean_train_score': array([-0.38970738, -0.38953488, -0.39011885, -0.39108091, -0.39128726,\n",
       "        -0.38995129, -0.38988973, -0.39037553, -0.39094492, -0.39135896,\n",
       "        -0.39007464, -0.39022435, -0.39038502, -0.39118948, -0.39163679,\n",
       "        -0.3905772 , -0.3902323 , -0.39075159, -0.39133315, -0.39160094,\n",
       "        -0.39078524, -0.39081316, -0.39110956, -0.3916968 , -0.39196562]),\n",
       " 'param_reg_alpha': masked_array(data=[1, 1, 1, 1, 1, 1.5, 1.5, 1.5, 1.5, 1.5, 2, 2, 2, 2, 2,\n",
       "                    2.5, 2.5, 2.5, 2.5, 2.5, 3, 3, 3, 3, 3],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.05, 0.1, 0.5, 1.5, 2, 0.05, 0.1, 0.5, 1.5, 2, 0.05,\n",
       "                    0.1, 0.5, 1.5, 2, 0.05, 0.1, 0.5, 1.5, 2, 0.05, 0.1,\n",
       "                    0.5, 1.5, 2],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False, False, False,\n",
       "                    False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 1, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 1, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2.5, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 2.5, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 2.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2.5, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 2.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 3, 'reg_lambda': 0.05},\n",
       "  {'reg_alpha': 3, 'reg_lambda': 0.1},\n",
       "  {'reg_alpha': 3, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 3, 'reg_lambda': 1.5},\n",
       "  {'reg_alpha': 3, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([ 6, 10,  4, 24, 20, 18,  5, 23,  9, 17, 19, 16,  3, 21, 11, 15,  7,\n",
       "         1, 25, 13,  2, 12,  8, 14, 22], dtype=int32),\n",
       " 'split0_test_score': array([-0.4094509 , -0.41048858, -0.40918317, -0.40964999, -0.40992844,\n",
       "        -0.40991206, -0.41019554, -0.41011791, -0.41016061, -0.41003417,\n",
       "        -0.41027916, -0.4096823 , -0.40960375, -0.41015463, -0.41041957,\n",
       "        -0.40979706, -0.4101426 , -0.40953799, -0.41010316, -0.41012064,\n",
       "        -0.40983748, -0.41033638, -0.40977869, -0.41014887, -0.41058378]),\n",
       " 'split0_train_score': array([-0.38979801, -0.38894091, -0.38949112, -0.3912205 , -0.39124059,\n",
       "        -0.38983348, -0.38993936, -0.38991121, -0.39055895, -0.39082143,\n",
       "        -0.38979134, -0.38972295, -0.39020312, -0.39076654, -0.39129365,\n",
       "        -0.39010103, -0.38969424, -0.39079095, -0.39092711, -0.39180393,\n",
       "        -0.3903966 , -0.39055605, -0.39090367, -0.39119836, -0.39209314]),\n",
       " 'split1_test_score': array([-0.41157721, -0.41162869, -0.4114886 , -0.41203831, -0.41169402,\n",
       "        -0.4119812 , -0.41077141, -0.41154106, -0.41125792, -0.41187977,\n",
       "        -0.41140293, -0.41176391, -0.41111081, -0.41169427, -0.41138615,\n",
       "        -0.41178842, -0.41145108, -0.41116827, -0.41188249, -0.41162383,\n",
       "        -0.41097596, -0.41155021, -0.41190778, -0.41130438, -0.41172368]),\n",
       " 'split1_train_score': array([-0.3894712 , -0.38969862, -0.38989959, -0.39021066, -0.3911713 ,\n",
       "        -0.38962468, -0.38959623, -0.38978962, -0.39052675, -0.39107761,\n",
       "        -0.38987112, -0.39009878, -0.39002731, -0.39053304, -0.39144955,\n",
       "        -0.39040083, -0.39013959, -0.38968388, -0.39126319, -0.39124238,\n",
       "        -0.39090074, -0.39088021, -0.39085535, -0.39163254, -0.39169464]),\n",
       " 'split2_test_score': array([-0.40887521, -0.40862555, -0.40874671, -0.40913095, -0.40874758,\n",
       "        -0.40885459, -0.40875344, -0.40922023, -0.40837771, -0.40866166,\n",
       "        -0.40887765, -0.40885998, -0.40861449, -0.40798697, -0.40821559,\n",
       "        -0.40872377, -0.4086617 , -0.4084912 , -0.40898514, -0.40855993,\n",
       "        -0.40830334, -0.40841117, -0.40834133, -0.40847699, -0.4086109 ]),\n",
       " 'split2_train_score': array([-0.39021977, -0.39022409, -0.39094595, -0.39217816, -0.39179998,\n",
       "        -0.39078623, -0.3904902 , -0.3916426 , -0.39157248, -0.39216935,\n",
       "        -0.39086332, -0.39162009, -0.39149813, -0.39211127, -0.3920147 ,\n",
       "        -0.3914422 , -0.39117279, -0.39146601, -0.39212084, -0.39216284,\n",
       "        -0.39132923, -0.39143875, -0.3917093 , -0.39261246, -0.39279973]),\n",
       " 'split3_test_score': array([-0.4095857 , -0.40937504, -0.40967256, -0.40975501, -0.40968194,\n",
       "        -0.40946585, -0.40985948, -0.4096825 , -0.40978395, -0.40955099,\n",
       "        -0.40941663, -0.40954539, -0.40922035, -0.41022692, -0.40918845,\n",
       "        -0.40944991, -0.40926793, -0.40920578, -0.40954831, -0.40948823,\n",
       "        -0.40961872, -0.40931769, -0.40904768, -0.40962753, -0.4093273 ]),\n",
       " 'split3_train_score': array([-0.38946168, -0.38932119, -0.38983994, -0.39081159, -0.39078374,\n",
       "        -0.38960589, -0.38944589, -0.39004273, -0.39096062, -0.39142299,\n",
       "        -0.38993123, -0.38966694, -0.39000089, -0.39120286, -0.39154802,\n",
       "        -0.390468  , -0.38999796, -0.39054868, -0.3909101 , -0.39132797,\n",
       "        -0.39039875, -0.39076541, -0.39105007, -0.39122035, -0.39176081]),\n",
       " 'split4_test_score': array([-0.41017769, -0.40969689, -0.41003725, -0.41056411, -0.41066805,\n",
       "        -0.41028568, -0.40987239, -0.41052013, -0.41018191, -0.41028163,\n",
       "        -0.41056038, -0.4103275 , -0.41036457, -0.41068806, -0.41061637,\n",
       "        -0.41038818, -0.41017557, -0.41023647, -0.41076846, -0.41021705,\n",
       "        -0.41000179, -0.41024925, -0.41066764, -0.41045478, -0.4106061 ]),\n",
       " 'split4_train_score': array([-0.38958624, -0.3894896 , -0.39041765, -0.39098364, -0.39144068,\n",
       "        -0.38990617, -0.38997696, -0.39049149, -0.3911058 , -0.39130344,\n",
       "        -0.38991619, -0.39001298, -0.39019567, -0.3913337 , -0.39187805,\n",
       "        -0.39047395, -0.39015693, -0.39126842, -0.39144452, -0.39146759,\n",
       "        -0.39090088, -0.39042536, -0.3910294 , -0.39182031, -0.39147978]),\n",
       " 'std_fit_time': array([0.47407429, 0.28411735, 0.17582765, 0.25836405, 0.16684365,\n",
       "        0.25321104, 0.28653132, 0.10780396, 0.2109014 , 0.34359954,\n",
       "        0.58094477, 0.5345718 , 0.43857408, 0.19163179, 0.1968132 ,\n",
       "        0.24194183, 0.53251354, 0.22504844, 0.19303857, 0.28765868,\n",
       "        0.4952152 , 0.07880703, 0.42883251, 0.12231482, 1.93605425]),\n",
       " 'std_score_time': array([0.00672859, 0.008165  , 0.01144399, 0.00689969, 0.01268817,\n",
       "        0.00994587, 0.00720017, 0.00721324, 0.0026807 , 0.00813925,\n",
       "        0.00826236, 0.01116378, 0.00708257, 0.00832676, 0.00478401,\n",
       "        0.00792321, 0.00514676, 0.00824147, 0.00592355, 0.00267746,\n",
       "        0.0080372 , 0.00503285, 0.00714934, 0.00331724, 0.01672733]),\n",
       " 'std_test_score': array([0.00092035, 0.00102528, 0.0009392 , 0.00101503, 0.00098864,\n",
       "        0.00105469, 0.00065775, 0.00079171, 0.00092826, 0.00105578,\n",
       "        0.00088345, 0.00098177, 0.00087354, 0.00121316, 0.00112374,\n",
       "        0.00103124, 0.00094505, 0.00091338, 0.00100471, 0.0010034 ,\n",
       "        0.00085837, 0.00105495, 0.00124733, 0.00093686, 0.00108777]),\n",
       " 'std_train_score': array([0.0002834 , 0.00042481, 0.00050858, 0.0006423 , 0.00033334,\n",
       "        0.00043336, 0.0003616 , 0.00067654, 0.00038569, 0.00045431,\n",
       "        0.00039734, 0.00071703, 0.00056275, 0.00054415, 0.00026896,\n",
       "        0.00045357, 0.00049864, 0.00062614, 0.00044308, 0.00033994,\n",
       "        0.000353  , 0.00035061, 0.00030876, 0.00051638, 0.00046118])}"
      ]
     },
     "execution_count": 203,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.409728 using {'reg_alpha': 2.5, 'reg_lambda': 0.5}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/fuxi/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f270be03320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6. 调整学习率，再次直接调用xgboost内嵌的cv寻找最佳的参数n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit_2(alg, X_train, y_train, cv_folds=3, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    #xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='logloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('6_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='logloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "    print ('logloss of train is:', logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of train is: 0.38725263886334504\n"
     ]
    }
   ],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb6 = XGBClassifier(\n",
    "        learning_rate =0.05,\n",
    "        n_estimators=2000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample = 0.85,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel=0.7,\n",
    "        reg_alpha = 2.5,  #叶子结点数目   ，越大越好\n",
    "        reg_lambda = 0.5,  #叶子结点分数，越小越好\n",
    "        objective= 'binary:logistic',\n",
    "        seed=3)\n",
    "\n",
    "modelfit_2(xgb6, X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'base_score': 0.5,\n",
       " 'booster': 'gbtree',\n",
       " 'colsample_bylevel': 0.7,\n",
       " 'colsample_bytree': 0.9,\n",
       " 'gamma': 0,\n",
       " 'learning_rate': 0.05,\n",
       " 'max_delta_step': 0,\n",
       " 'max_depth': 5,\n",
       " 'min_child_weight': 5,\n",
       " 'missing': None,\n",
       " 'n_estimators': 1431,\n",
       " 'nthread': 1,\n",
       " 'objective': 'binary:logistic',\n",
       " 'reg_alpha': 2.5,\n",
       " 'reg_lambda': 0.5,\n",
       " 'scale_pos_weight': 1,\n",
       " 'seed': 3,\n",
       " 'silent': 1,\n",
       " 'subsample': 0.85}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb6.get_xgb_params()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 保存模型，供测试使用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存模型\n",
    "import pickle\n",
    "pickle.dump(xgb6, open(\"xgb_model.pkl\", 'wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of train is: 0.38721551918830166\n"
     ]
    }
   ],
   "source": [
    "#保存数据\n",
    "import pickle\n",
    "\n",
    "xgb = pickle.load(open(\"xgb_model.pkl\", 'rb'))\n",
    "\n",
    "train_predprob = xgb.predict_proba(X_train)\n",
    "logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "#Print model report:\n",
    "print ('logloss of train is:', logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
